单片机1622/1621驱动程序编写(较为通用版)

160次阅读

共计 1182 个字符,预计需要花费 3 分钟才能阅读完成。

 

最近在搞 LCD,刚好用到 1622/1621 驱动芯片,网上看了很多,但是实际中还是有很多问题,比如不够说得有点模棱两可,或者比较专用,而且遇到的一些坑也没有详细记录,所以写个笔记记录一下。

一、硬件部分

1、含 LCD 驱动的单片机

LCD 可以直接用单片机或者 ic 来驱动,但是首先要看的是单片机是否有 LCD 驱动这个模块,如果没有的话是不能直接把端口连在 LCD 上,通过端口拉高和拉低来操作 LCD,因为 LCD 的引脚拉高或拉低不是立刻的,而是一个上升和下降的过程。比如复旦微的一款 FM33LG048 就支持 LCD 驱动。

单片机 1622/1621 驱动程序编写(较为通用版)

单片机 1622/1621 驱动程序编写 (较为通用版) 编辑

 

2、不含 LCD 驱动的单片机

还有单片机没有这一个模块,这个时候就需要对每个引脚进行处理或者使用驱动 ic,每个引脚单独处理这方面未涉及,所以选的是驱动 ic 的方式。

 

3、驱动 ic 选型

找厂商定制 LCD 或者是从外面买的现成的 LCD,在硬件层面,有几个参数需要注意,一个是供电电压还有一个是偏压和占空比。这里也是容易忽略的地方

1)两种 LCD 对比

下面是两种 LCD

1、LCD1

单片机 1622/1621 驱动程序编写 (较为通用版) 单片机 1622/1621 驱动程序编写(较为通用版) 编辑

2、LCD2

单片机 1622/1621 驱动程序编写 (较为通用版) 单片机 1622/1621 驱动程序编写(较为通用版) 编辑

常见的 LCD 驱动有 1622 和 1621,先对比一下相关的手册:

 

2)两种驱动芯片对比

1)1621

单片机 1622/1621 驱动程序编写 (较为通用版) 单片机 1622/1621 驱动程序编写(较为通用版) 编辑

2)1622

单片机 1622/1621 驱动程序编写 (较为通用版) 单片机 1622/1621 驱动程序编写(较为通用版) 编辑

 

3)驱动芯片选型

根据上述 LCD 的偏置和占空比,可以迅速进行选型:

  • LCD1 选择 1621
  • LCD2 选择 1622

注意: 选型错误可能导致亮度过低和可视角偏移。例如,正常情况下可视角范围为 -45° 到 45°,但使用错误的芯片可能会变为 0° 到 90°,这时需要将 LCD 抬高或倾斜才能清晰查看。

 

4、驱动 ic 外设电路

这里以 1621 为例,下图为推荐电路

单片机 1622/1621 驱动程序编写(较为通用版)

单片机 1622/1621 驱动程序编写 (较为通用版) 编辑

 

这里只需考虑两个方面:首先,除了将 CS、RD 和 WR 三根线连接到单片机外,还需要关注 VLCD 的上拉电阻 VR,这与对比度有关。当 VR 为 0V 时,对比度达到最大;增大电阻会导致对比度降低。

 

如果对比度最大,即使不驱动,LCD 屏幕上可能会显示所有内容;而对比度过低时,即使驱动 LCD,屏幕也可能没有任何显示。

因此,VR 部分需要进行调节。例如,在单片机未运行程序的情况下,给整板上电,先将 VR 短接,观察显示效果(某些 LCD 在 VR 短接时,即使对比度最大,也可能不会全显示)。如果屏幕全显示,则可以使用变阻箱逐渐增大 VR,直到屏幕的显示刚好消失为止。下图为电路示例。

单片机 1622/1621 驱动程序编写(较为通用版)

单片机 1622/1621 驱动程序编写 (较为通用版) 编辑

 

二、软件部分

1、前期准备:端口处理函数

// 设置指定位置的位为 1 
#define setb(p, x) (p |= (1 << (x)))

// 清除指定位置的位(设置为 0)
#define clrb(p, x) (p &= ~(1 << (x)))

// 获取指定位置的位值(返回 1 或 0)
#define getb(p, x) (p & (1 << (x)))

// 切换指定位置的位(0 变 1,1 变 0)
#define toggleb(p, x) ((p) ^= (1 << (x)))

单片机 1622/1621 驱动程序编写(较为通用版)

 

2、端口配置成输出

不同单片机不同

 

 

 

正文完
 0